package ui.juego

import dominio.ubicaciones.Pais
import java.util.List
import java.util.ArrayList
import org.uqbar.commons.utils.Observable
import dominio.individuos.Villano
import org.uqbar.commons.model.ObservableUtils
import utilidades.Utils
import dominio.investigacion.OrdenDeArresto
import dominio.investigacion.Caso

@Observable
class Investigacion {
	
	@Property Pais paisActual
	@Property Pais paisAnterior
	@Property Caso caso
	@Property List<Pais> recorridoCriminal
	@Property List<Pais> destinosFallidos
	private OrdenDeArresto ordenDeArresto
	@Property boolean ordenEmitida = false
	@Property boolean ordenNoEmitida = true
	extension Utils utils = new Utils
	
	new(Caso caso) {
		this.caso = caso
		this.paisActual = caso.paisDelRobo
		this.recorridoCriminal = new ArrayList<Pais>
		this.recorridoCriminal += caso.paisDelRobo
		this.destinosFallidos = new ArrayList<Pais> 
	}
	
	
	
	def emitirOrdenContra(Villano villano) {
		this.ordenDeArresto = new OrdenDeArresto(villano)
		this.ordenEmitida = true
		this.ordenNoEmitida = false
		ObservableUtils.firePropertyChanged(this, "ordenEmitida", ordenEmitida)
		ObservableUtils.firePropertyChanged(this, "ordenNoEmitida", ordenNoEmitida)
		ObservableUtils.firePropertyChanged(this, "ordenDeArresto", ordenDeArresto)
	}
	
	def getOrdenDeArresto() {
		this.ordenDeArresto
	}
	
	def getMapamundi() {
		caso.mapamundi
	}
	
	def viajar(Pais paisDestino) {
		paisAnterior = paisActual
		paisActual = paisDestino
	}
	
	def registrarViaje(Pais pais) {
		if(caso.rutaDeEscape.contains(pais)) {
				recorridoCriminal.addIfNotExist(pais)
		}
		else destinosFallidos.addIfNotExist(pais)
	}
	
}